home *** CD-ROM | disk | FTP | other *** search
-
- {$g+,n+,e-}
-
- { Reals : -1 -0.1 0.3 -1.139
- Complex : 0 0.8 -0.5 0.238 }
-
- program Julia;
- { Julia Fractal, mode 13h. By Bas van Gaalen, Holland, PD }
- uses
- crt;
- const
- zoom=-1;
- vidseg:word=$a000;
- type
- real=double;
- var
- cx,cy,xo,yo,x1,y1:real;
- mx,my,a,b,i,orb:word;
-
- procedure setpal(col,r,g,b : byte); assembler; asm
- mov dx,03c8h; mov al,col; out dx,al; inc dx; mov al,r
- out dx,al; mov al,g; out dx,al; mov al,b; out dx,al; end;
-
- procedure retrace; assembler; asm
- mov dx,03dah; @vert1: in al,dx; test al,8; jnz @vert1
- @vert2: in al,dx; test al,8; jz @vert2; end;
-
- begin
- checkbreak:=true;
- {write('Real part: '); readln(cx);} cx:=0.3;
- {write('Imaginary part: '); readln(cy);} cy:=-0.5;
- asm mov ax,13h; int 10h; end;
- for i:=1 to 64 do setpal(i,10+i div 3,10+i div 3,15+round(i/1.306122449));
- mx:=319; my:=199;
- for a:=0 to mx do
- for b:=0 to my do begin
- if zoom<>-4 then xo:=-2-0.5*zoom+a/(mx/(4+zoom))
- else xo:=-2-0.5*zoom+a/mx; { x complex plane coordinate }
- if zoom<>-4 then yo:=2+0.5*zoom-b/(my/(4+zoom))
- else yo:=2+0.5*zoom-b/my; { y complex plane coordinate }
- orb:=0; i:=0;
- repeat
- x1:=xo*xo-yo*yo+cx;
- y1:=2*xo*yo+cy;
- xo:=x1;
- yo:=y1;
- inc(i);
- until (i=64) or (x1*x1+y1*y1>4) or (abs(x1)>2) or (abs(y1)>2);
- if i<>64 then orb:=i;
- mem[vidseg:b*320+a]:=orb; { Plot orbit }
- end;
-
- while not keypressed do;
- while keypressed do readkey;
- textmode(lastmode);
- end.
-